#!/usr/bin/env bash

# nacos配置文件
function nacos_config() {
  # 将配置写进配置文件
  echo_sleep "\n开始写入配置文件……"

  docker run -p 8848:8848 --name $application -d $image:$version &>/dev/null
  sleep 2
  docker cp $application:/home/nacos/logs/ ${applicationPath}/ &>/dev/null
  docker cp $application:/home/nacos/conf/ ${applicationPath}/ &>/dev/null
  sleep 1
  docker rm -f $application

  ls ${applicationPath}/conf | grep application.properties &>/dev/null
  if [ $? -eq 0 ]; then
    echo_sleep "配置文件写入完成！\n\n"
  else
    echo "相关配置文件创建失败！"
    exit
  fi
}

# 判断容器是否启动成功
function nacos_successOrNot() {
  echo_sleep "docker run命令:\n $dockerRunCmd \n" 2
  if [[ -n $(docker ps -q -f "name=^$application$") ]]; then
    echo -e "$application 容器启动成功"
    echo -e "\t端口号：$port"
    echo -e "\t版本号：$version"
    echo -e "\t容器名称：$application"
    echo -e "\t本地映射路径：$applicationPath"
    echo -e "进入容器使用命令：docker exec -it $application /bin/bash"
    echo -e "web页面访问地址: http://host:${port}/nacos"
  else
    log_error "$application 容器启动失败,请检查docker run命令是否有误,端口是否被占用"
  fi
}

# 安装nacos
function nacos_install() {
  application="nacos"                         # 应用名称,docker ps中显示的名称
  image="nacos/nacos-server"                  # docker仓库中镜像名称
  applicationPath="/opt/nacos/${application}" # 本地映射文件路径
  port="8848"                                 # 对外映射的端口号
  version="latest"                            # 镜像版本号,默认为最新版本
  dockerRunCmd=""                             # 最后执行的docker run命令

  echo -e "=========================开始安装Nacos========================="
  echo_red "注:本脚本安装的是nacos单机版,安装集群请自行修改配置文件"

  echo_yellow "1.检测是否存在 ${image} 容器"
  docker_delExisting ${image}

  echo_yellow "2.开始拉取镜像文件"
  docker_pull

  echo_yellow "3.开始创建本地映射目录"
  create_file_path conf logs

  echo_yellow "4.开始创建配置文件"
  nacos_config

  echo_yellow "5.创建并启动docker容器"
  port=$(read_input "请输入需要映射的端口(默认为 ${port})：" ${port})
  application=$(read_input "请输入容器的名称(默认为 ${application})：" ${application})

  echo -e "${application}启动中,请等待......"

  dockerRunCmd="docker run --restart=always --privileged=true \
	-v $applicationPath/logs/:/home/nacos/logs \
	-v $applicationPath/conf/:/home/nacos/conf \
	-v /etc/localtime:/etc/localtime:ro \
	-e JVM_XMS=256m \
	-e JVM_XMX=256m \
	-e MODE=standalone \
	-p $port:8848 -p 9848:9848 -p 9849:9849 \
	--name $application -d $image:$version &> /dev/null"

  eval $dockerRunCmd

  echo_yellow "6.检测容器是否启动成功"
  nacos_successOrNot

  echo -e "=========================安装Nacos结束========================="
}
